package elm.entity.po;

import com.fasterxml.jackson.annotation.JsonManagedReference;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.*;
import lombok.*;
import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;

/**
 * 商家实体类
 * 对应数据库中的商家表，包含商家的基本信息和关联的食品列表
 */
@Schema(description = "商家实体类，对应数据库中的商家表，包含商家的基本信息和关联的食品列表")
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString(exclude = "foods")  // 避免循环引用，在toString()中排除foods字段
public class Business {
    /**
     * 商家唯一标识符
     * 自增主键
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Schema(description = "商家唯一标识符，自增主键", example = "1")
    private Long id;

    @Schema(description = "商家类别",example = "美食")
    private String type;
    /**
     * 商家名称
     */
    @Schema(description = "商家名称", example = "测试商家")
    private String name;

    /**
     * 商家图片URL
     */
    @Schema(description = "商家图片URL", example = "http://example.com/image.jpg")
    private String imgUrl;

    /**
     * 起送价
     */
    @Schema(description = "起送价", example = "20.00")
    private BigDecimal minPrice;

    /**
     * 配送费
     */
    @Schema(description = "配送费", example = "5.00")
    private BigDecimal deliveryPrice;

    /**
     * 商家评分
     */
    @Schema(description = "商家评分", example = "4.5")
    private BigDecimal rating;

    /**
     * 销量
     */
    @Schema(description = "销量", example = "100")
    private Integer sales;

    /**
     * 商家描述信息
     */
    @Schema(description = "商家描述信息", example = "这是一家优质的商家")
    private String description;

    /**
     * 关联的食品列表
     * 与Food实体形成一对多关系，使用JsonManagedReference避免序列化时的循环引用
     */
    @OneToMany(mappedBy = "business", fetch = FetchType.EAGER)
    @JsonManagedReference  // 标记为父对象，配合Food实体中的@JsonBackReference
    @Schema(description = "关联的食品列表，包含该商家下的所有食品")
    private List<Food> foods;

}

